<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>游戏排行榜</title>
    <style>
        body {
            background-color: #c7edcc
        }
    </style>
</head>
<body>
<pre>
    游戏中有各种排行榜,比如战力排行榜.

    对于数据量不是很大的排行榜,可以使用List, 然后使用Collections.sort方法,但对于大量数据并且变化又很频繁的话,这里的开销就很大了.

    List不满足数据量很大的需求,可以使用TreeMap,当战力变化时,可以先移除然后又添加,这里需要注意key值,TreeMap通过key值进行查找和删除.

    TreeMap采用红-黑树实现,平衡树查找效率是log(n),所以速度还是很快的,唯一不好的是需要维持平衡度,插入和移除的时候需要进行旋转

    对于数据量很大和变化很频繁的数据,TreeMap可能也没法满足,总会大到没法满足的时候,这时候可以加入一些赛选条件,比如达到指定值才加入排行

    Redis常被用来做排行榜,最近被问到为什么Redis为什么那么快,结果没回答出来.以前也看过但是忘记了.

    Redis使用了跳跃表,表现比红黑树还好的数据结构, 而且还使用了map
    1.map用于判断是否存在和查找得分值,复杂度O(1).
    2.跳跃表用于范围性查找,这是（高效地）实现 ZRANGE 、 ZRANK 和 ZINTERSTORE 等命令的关键

    关于跳跃表与红黑树具体比较后面在继续学习

    http://blog.csdn.net/qq575787460/article/details/16371287

    项目中用到的问题,排行榜,登陆注册
    api设计问题,接口设计问题
    https,安全
    序列化id比较细的问题
    事务requied requirednew

    还有很多都是自己引入的问题,由于没有深入了解或者忘记了,自己坑自己.


    接口方法设计,给别人调用的接口:
    1.名字不要有歧义,一看就懂,比如一些名词用于查询信息,动词用于修改信息,一看就懂
    2.写好注释
    3.如果可以支持泛型,更加通用
    4.方法越少越好
    5.描述该接口是干什么用的,会产生什么行为,以及需要注意的地方,比如是线程安全等,防止调用者用在了不适合的场合.否
    6.详细列出参数,返回值(什么情况下返回什么值),以及可以会在哪些情况下抛出哪些异常,提醒调用者对返回值进行处理
</pre>
</body>
</html>